package own.stu.jobgib.playown.redis.redisson;

import lombok.AllArgsConstructor;
import lombok.Data;
import org.redisson.api.RLiveObjectService;
import org.redisson.api.RedissonClient;
import org.redisson.api.annotation.REntity;
import org.redisson.api.annotation.RId;
import org.redisson.api.annotation.RIndex;

import java.util.Date;

/**
 * 一个 分布式实时对象（Live Object） 可以被理解为一个功能强化后的Java对象。
 * 该对象不仅可以被一个JVM里的各个线程相引用，还可以被多个位于不同JVM里的线程同时引用
 */
public class LiveObjectTest extends BaseTest {

    public static void main(String[] args) {

        RedissonClient client = getClient();

        RLiveObjectService liveObjectService = client.getLiveObjectService();

        TV tv = new TV("on");

        // 将object对象当前的状态持久化到Redis里并与之保持同步。
        liveObjectService.persist(tv);
        TV t1 = liveObjectService.get(TV.class, "on");
        System.out.println(t1);

    }

    @REntity
    @AllArgsConstructor
    @Data
    public static class TV {
        @RId
        String name;

        @RIndex
        Date date;

        String desc;

        public TV() {
        }

        public TV(String name) {
            this.name = name;
            this.date = new Date();
        }
    }
}
